home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / mods / misc / CUSTNeverWhere.lha / NeverWhere / NeverWhere_Loader.s < prev    next >
Text File  |  1998-09-19  |  9KB  |  519 lines

  1. *************************************************
  2. * NeverWhere Demo Loader by Tronic / Crionics.    *
  3. * Made with Gizwiz Delta Music Editor.        *
  4. * Adapted by Mr.STYCKX / Nicolas Pomarède    *
  5. *                        *
  6. * Original replay was PC Relative.        *
  7. *                        *
  8. * Ripped : 6/11/94                *
  9. * EaglePlayer / Delitracker port : 19/09/98    *
  10. *    Volume                    *
  11. *    Balance                    *
  12. *    SubSong                    *
  13. *    EP_Voices                *
  14. *    EP_StructInit (Analyzer)        *
  15. *************************************************
  16.  
  17.     opt    o+
  18.  
  19.     output    ram:CUST.NeverWhere_Loader
  20.  
  21.  
  22. NEVER_TEST    =    0        ; 0 => BUILD COMPLETE CUSTOM MODULE
  23.                     ; 1 => BUILD SMALL CODE FOR TESTING
  24.  
  25.     section    Never,code_c
  26.  
  27.  
  28.  
  29.     incdir    "Include:"
  30.     include    "misc/DeliPlayer.i"
  31.     include    "misc/EaglePlayer.i"
  32.  
  33.  
  34.     IFEQ    NEVER_TEST-0            ; COMPLETE VERSION
  35.  
  36.  
  37.     PLAYERHEADER PlayerTagArray
  38.  
  39.     dc.b '$VER: NeverWhere Loader Music by Tronic / Crionics custom player V1.0, '
  40.     dc.b 'ripped and adapted by Mr.STYCKX (09/98)',0
  41.  
  42.     EVEN
  43.  
  44. PlayerTagArray
  45.     dc.l    DTP_CustomPlayer,1        ; CustomPlayer - Tag (important !!!)
  46.     dc.l    DTP_Flags,PLYF_CUSTOM
  47.  
  48.     dc.l    DTP_PlayerVersion,1<<16+0    ; v1.0
  49.     dc.l    EP_PlayerVersion,1
  50.     dc.l    DTP_PlayerName,PName
  51.     dc.l    DTP_Creator,CName
  52.  
  53.     dc.l    DTP_InitPlayer,InitPlay        ; alloc audio
  54.     dc.l    DTP_EndPlayer,EndPlay        ; free audio
  55.     dc.l    DTP_InitSound,NEVER_init    ; init custom data
  56.     dc.l    DTP_EndSound,NEVER_end        ; clear DMA
  57.  
  58.     dc.l    DTP_SubSongRange,NEVER_SubSongRange
  59.  
  60.     dc.l    DTP_Interrupt,NEVER_Play
  61.  
  62.     dc.l    DTP_Volume,NEVER_Volume
  63.     dc.l    DTP_Balance,NEVER_Volume
  64.  
  65.     dc.l    EP_Voices,NEVER_SetVoices
  66.     dc.l    EP_StructInit,NEVER_StructInit
  67.  
  68.     dc.l    EP_Flags,EPB_Voices!EPB_Analyzer!EPB_Volume!EPB_Balance
  69.  
  70.     dc.l    TAG_DONE
  71.  
  72.  
  73. PName    dc.b    "NeverWhere Loader Custom v1.0",0
  74. CName    dc.b    "Music by Tronic / Crionics using Delta Editor by Gizwiz.",$a
  75.     dc.b    "Adapted by Mr.STYCKX (19/11/98)",0
  76.  
  77.     EVEN
  78.  
  79.  
  80. NEVER_StructAnalyzer            ; transmis à EaglePlayer pour gérer
  81.     ds.l    UPS_SizeOF        ; les analyzers
  82.  
  83.  
  84.  
  85. *-----------------------------------------------------------------------*
  86. ;
  87. ; Init Player
  88.  
  89. InitPlay
  90.     move.l    dtg_AudioAlloc(a5),a0        ; Function
  91.     jmp    (a0)
  92.  
  93.  
  94. *-----------------------------------------------------------------------*
  95. ;
  96. ; End Player
  97.  
  98. EndPlay
  99.     move.l    dtg_AudioFree(a5),a0        ; Function
  100.     jmp    (a0)
  101.  
  102.  
  103. *-----------------------------------------------------------------------*
  104. ;
  105. ; Init Custom Replay Routine
  106.  
  107. NEVER_init
  108.     move.w    dtg_SndNum(a5),d0    ; sub song nbr (1..5)
  109.     bsr.s    NEVER_InitSong
  110.  
  111.     rts
  112.  
  113.  
  114. *-----------------------------------------------------------------------*
  115. ;
  116. ; Clear Audio Reg.
  117.  
  118. NEVER_end
  119.     move.w    #$f,$dff096
  120.     clr.w    $dff0a8
  121.     clr.w    $dff0b8
  122.     clr.w    $dff0c8
  123.     clr.w    $dff0d8
  124.  
  125.     rts
  126.  
  127.  
  128. *-----------------------------------------------------------------------*
  129. ;
  130. ; Interrupt routine called every 1/50 s
  131.  
  132. NEVER_Play
  133.     bsr.s    NEVER_InterVBL
  134.     rts
  135.  
  136.  
  137. *-----------------------------------------------------------------------*
  138. ;
  139. ; Returns min and max sub song
  140.  
  141. NEVER_SubSongRange
  142.     moveq    #1,d0            ; min
  143.     moveq    #1,d1            ; max
  144.  
  145.     rts
  146.  
  147.  
  148. *-----------------------------------------------------------------------*
  149. ;
  150. ; Set Volume
  151.  
  152. NEVER_Volume
  153.     move.w    dtg_SndLBal(a5),d0    ; Vol Left
  154.     mulu    dtg_SndVol(a5),d0    ; Vol Max
  155.     lsr.w    #6,d0
  156.     move.w    d0,NEVER_MasterVolA    ; final Vol Left
  157.     move.w    d0,NEVER_MasterVolD
  158.  
  159.     move.w    dtg_SndRBal(a5),d0
  160.     mulu    dtg_SndVol(a5),d0
  161.     lsr.w    #6,d0
  162.     move.w    d0,NEVER_MasterVolB
  163.     move.w    d0,NEVER_MasterVolC
  164.  
  165.     rts
  166.  
  167.  
  168. *-----------------------------------------------------------------------*
  169. ;
  170. ; Set DMA Voices
  171.  
  172. NEVER_SetVoices
  173.     move.w    d0,NEVER_DMA_EP    ; bit=1 <=> voice is ON
  174.  
  175.     rts
  176.  
  177.  
  178. *-----------------------------------------------------------------------*
  179. ;
  180. ; Returns address of the UPS structure to EaglePlayer
  181.  
  182. NEVER_StructInit
  183.     lea    NEVER_StructAnalyzer(pc),a0
  184.  
  185.     rts
  186.  
  187.  
  188.  
  189. *-----------------------------------------------------------------------*
  190.  
  191.  
  192.     ELSEIF                ; TESTVERSION
  193.  
  194.  
  195. ;-------
  196. ; Small code to test the player under a debugger
  197.  
  198.  
  199.     bsr    NEVER_InitSong
  200.  
  201.     move.l    $6c.w,Jmp+2
  202.     move.l    #Vbl,$6c.w
  203.     rts
  204.  
  205.  
  206. End
  207.     move.w    #$f,$dff096
  208.     move.l    Jmp+2(pc),$6c.w
  209.     rts
  210.  
  211.  
  212. Vbl
  213.     btst    #5,$dff01f
  214.     beq.s    Jmp
  215.  
  216. .wa    cmp.b    #70,$dff006
  217.     blt.s    .wa
  218.  
  219.     move.w    #$f00,$dff180
  220.  
  221.     movem.l    d0-a6,-(a7)
  222.     bsr    NEVER_InterVBL
  223.     movem.l    (a7)+,d0-a6
  224.  
  225.     move.w    #$345,$dff180
  226.  
  227. Jmp    jmp    0.l
  228.  
  229.  
  230.  
  231.  
  232. NEVER_StructAnalyzer            ; transmis à EaglePlayer pour gérer
  233.     ds.l    UPS_SizeOF        ; les analyzers
  234.  
  235.  
  236.     ENDC
  237.  
  238.  
  239.  
  240. ;------------------------------------------------------------------------
  241. ; Données pour EaglePlayer / Delitracker
  242.  
  243. NEVER_DMA_EP    dc.w    %1111        ; voix actives depuis EaglePlayer
  244.  
  245. NEVER_MasterVolA    dc.w    64        ; 0 .. 64
  246. NEVER_MasterVolB    dc.w    64
  247. NEVER_MasterVolC    dc.w    64
  248. NEVER_MasterVolD    dc.w    64
  249.  
  250. NEVER_OldPer1    dc.w    -1
  251. NEVER_OldPer2    dc.w    -1
  252. NEVER_OldPer3    dc.w    -1
  253. NEVER_OldPer4    dc.w    -1
  254.  
  255.  
  256.  
  257.  
  258.  
  259. ;-----------------------------------------------------------------------
  260. ; NeverWhere Loader Music
  261. ; Original music by Tronic / Crionics.
  262. ;
  263. ; NEVER_InitSong : called once
  264. ; NEVER_InterVBL : called every VBL
  265. ;
  266.  
  267.  
  268.  
  269. ;-----------------------------------------------------------------------
  270. ; Init song
  271.  
  272. NEVER_InitSong
  273.     bsr    NEVER_Patch
  274.     bra    NEVER_Data
  275.  
  276.  
  277.  
  278. ;-----------------------------------------------------------------------
  279. ; Routine appelée à chaque VBL
  280.  
  281. NEVER_InterVBL
  282.     movem.l    D0-A6,-(SP)
  283.  
  284.     lea    NEVER_StructAnalyzer(pc),a0
  285.     move.w    #-1,UPS_Enabled(a0)
  286.     move.w    #UPSB_Adr!UPSB_Len!UPSB_Per!UPSB_Vol!UPSB_DMACon,UPS_Flags(a0)
  287.  
  288.     move.w    UPS_Voice1Per(a0),NEVER_OldPer1
  289.     move.w    UPS_Voice2Per(a0),NEVER_OldPer2
  290.     move.w    UPS_Voice3Per(a0),NEVER_OldPer3
  291.     move.w    UPS_Voice4Per(a0),NEVER_OldPer4
  292.  
  293.     clr.w    UPS_Voice1Per(a0)
  294.     clr.w    UPS_Voice2Per(a0)
  295.     clr.w    UPS_Voice3Per(a0)
  296.     clr.w    UPS_Voice4Per(a0)
  297.  
  298.  
  299.     ;-- Original VBL
  300.     bsr    NEVER_Data+$17c
  301.  
  302.  
  303.     ;-- Set EaglePlayer Structures
  304.     ; La replay remet la période à chaque VBL,ce qui perturbe
  305.     ; les analyzers. On ne transmet donc une période que si elle est
  306.     ; différente de la VBL précédente.
  307.  
  308.     lea    NEVER_StructAnalyzer(pc),a0
  309.     move.w    UPS_Voice1Per(a0),d0
  310.     cmp.w    NEVER_OldPer1(pc),d0    ; nouvelle fréquence
  311.     bne.s    .2            ; oui
  312.     clr.w    UPS_Voice1Per(a0)    ; non, on remet a 0
  313.  
  314. .2    move.w    UPS_Voice2Per(a0),d0
  315.     cmp.w    NEVER_OldPer2(pc),d0
  316.     bne.s    .3
  317.     clr.w    UPS_Voice2Per(a0)
  318.  
  319. .3    move.w    UPS_Voice3Per(a0),d0
  320.     cmp.w    NEVER_OldPer3(pc),d0
  321.     bne.s    .4
  322.     clr.w    UPS_Voice3Per(a0)
  323.  
  324. .4    move.w    UPS_Voice4Per(a0),d0
  325.     cmp.w    NEVER_OldPer4(pc),d0
  326.     bne.s    .0
  327.     clr.w    UPS_Voice4Per(a0)
  328. .0
  329.  
  330.  
  331.  
  332.     clr.w    UPS_Enabled(a0)
  333.  
  334.     movem.l    (SP)+,D0-A6
  335.     rts
  336.  
  337.  
  338.  
  339.  
  340. NEVER_Patch
  341.     tst.w    Patch_Done
  342.     bne    .done            ; do patch only once
  343.     st    Patch_Done
  344.  
  345.     lea    NEVER_Data(pc),a0
  346.  
  347.     move.w    #$4e75,$6cc(a0)            ; change bfe001 (filter)
  348.     move.w    #$4e75,$6d6(a0)            ; filter
  349.  
  350.     lea    $1ec(a0),a1
  351.     lea    NEVER_CopyDMA(pc),a2
  352.     move.w    #$4e71,(a1)+
  353.     bsr.s    DoJsr
  354.  
  355.     lea    $2ce(a0),a1
  356.     lea    NEVER_StopDMA(pc),a2
  357.     move.w    #$4e71,(a1)+
  358.     bsr.s    DoJsr
  359.  
  360.     lea    $228(a0),a1
  361.     lea    CopyLen_1(pc),a2
  362.     bsr.s    DoJsr
  363.  
  364.     lea    $23c(a0),a1
  365.     lea    CopyAdr_1(pc),a2
  366.     bsr.s    DoBsr
  367.  
  368.     lea    $330(a0),a1
  369.     lea    CopyAdr_1(pc),a2
  370.     bsr.s    DoBsr
  371.  
  372.     lea    $334(a0),a1
  373.     lea    CopyLen_2(pc),a2
  374.     bsr.s    DoJsr
  375.  
  376.     lea    $43e(a0),a1
  377.     lea    CopyAdr_2(pc),a2
  378.     bsr.s    DoBsr
  379.  
  380.     lea    $442(a0),a1
  381.     lea    CopyLen_2(pc),a2
  382.     bsr.s    DoJsr
  383.  
  384.     lea    $668(a0),a1
  385.     lea    CopyPer(pc),a2
  386.     bsr.s    DoBsr
  387.  
  388.     lea    $690(a0),a1
  389.     lea    CopyVol(pc),a2
  390.     bsr.s    DoBsr
  391.  
  392. .done    rts
  393.  
  394.  
  395. DoJsr    move.w    #$4eb9,(a1)+
  396.     move.l    a2,(a1)+
  397.     rts
  398.  
  399. DoBsr    move.w    #$6100,(a1)+
  400.     sub.l    a1,a2
  401.     move.w    a2,(a1)+
  402.     rts
  403.  
  404.  
  405. ;-------
  406.  
  407. NEVER_CopyDMA
  408.     lea    NEVER_StructAnalyzer(pc),a0
  409.     move.w    NEVER_DMA_EP(pc),d0
  410.     and.w    (a5),d0
  411.     move.w    d0,UPS_DMACon(a0)
  412.     or.w    #$8000,d0
  413.     move.w    d0,$dff096        ; start voices
  414.     rts
  415.  
  416. ;-------
  417.  
  418. NEVER_StopDMA
  419.     move.w    4(a0),$dff096
  420.     rts
  421.  
  422.  
  423. ;------- Return correct UPS pointer in A0 for voice A1 + Master Vol in D7
  424.  
  425. GetUPS
  426.     lea    NEVER_StructAnalyzer(pc),a0
  427.     move.w    NEVER_MasterVolA(pc),d7
  428.     cmp.l    #$dff0a0,a1
  429.     beq.s    .ok
  430.     move.w    NEVER_MasterVolB(pc),d7
  431.     lea    UPS_Modulo(a0),a0
  432.     cmp.l    #$dff0b0,a1
  433.     beq.s    .ok
  434.     move.w    NEVER_MasterVolC(pc),d7
  435.     lea    UPS_Modulo(a0),a0
  436.     cmp.l    #$dff0c0,a1
  437.     beq.s    .ok
  438.     move.w    NEVER_MasterVolD(pc),d7
  439.     lea    UPS_Modulo(a0),a0
  440.  
  441. .ok    rts
  442.  
  443.  
  444. ;-------
  445.  
  446. CopyAdr_1
  447.     pea    (a0)
  448.     bsr.s    GetUPS
  449.     move.l    a4,UPS_Voice1Adr(a0)
  450.     move.l    a4,(a1)
  451.     move.l    (sp)+,a0
  452.     rts
  453.  
  454.  
  455. CopyAdr_2
  456.     pea    (a0)
  457.     bsr.s    GetUPS
  458.     move.l    d2,UPS_Voice1Adr(a0)
  459.     move.l    d2,(a1)
  460.     move.l    (sp)+,a0
  461.     rts
  462.  
  463.  
  464. CopyLen_1
  465.     pea    (a0)
  466.     bsr.s    GetUPS
  467.     move.w    4(a2),UPS_Voice1Len(a0)
  468.     move.w    4(a2),4(a1)
  469.     move.l    (sp)+,a0
  470.     rts
  471.  
  472.  
  473. CopyLen_2
  474.     pea    (a0)
  475.     bsr.s    GetUPS
  476.     move.w    (a2),UPS_Voice1Len(a0)
  477.     move.w    (a2),4(a1)